﻿namespace LinFu.AOP.Interfaces
{
    using System;
    using System.Diagnostics;
    using System.Reflection;

    public interface IInvocationContext
    {
        #region Properties

        object[] Arguments
        {
            get;
        }

        MethodInfo CallingMethod
        {
            get;
        }

        object ExtraInfo
        {
            get; set;
        }

        object ExtraInfoAdditional
        {
            get; set;
        }

        Type[] ParameterTypes
        {
            get;
        }

        Type ReturnType
        {
            get;
        }

        StackTrace StackTrace
        {
            get;
        }

        object Target
        {
            get;
        }

        MethodInfo TargetMethod
        {
            get;
        }

        Type TargetType
        {
            get;
        }

        Type[] TypeArguments
        {
            get;
        }

        #endregion Properties
    }
}